import store from '@/store'
import axios from 'axios'
import { Message } from 'element-ui'
import router from '@/router'

// create an axios instance
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})

// 请求拦截器
service.interceptors.request.use(config => {
  if (store.getters.token) {
    config.headers.Authorization = `Bearer ${store.getters.token}`
    const loginTime = localStorage.getItem('loginTime')
    if (Date.now() - loginTime > 72222000) {
      // 这里是超时逻辑
      // 1. 提醒用户 其实Promise.reject 会传到响应拦截, 已经有报错了
      // Message.error('token 已超时(主动)')
      // 2. 清理数据退出到登录页
      store.dispatch('user/logout')
      router.push('/login')
      // 3. 阻止当前请求
      return Promise.reject(new Error('token 已超时(主动)'))
    }
  }

  return config
})
// 响应拦截器
service.interceptors.response.use(res => {
  // console.log(res);
  //响应拦截 判断数据层面是否出错 根据用户输入的账号和密码
  const { message, success, data } = res.data
  if (success) {
    return data //数据层面没出错就返回res出去并放行
  } else {
    //数据层面出错就弹出提示框提醒用户
    //拦截器并不能阻止代码的运行
    //如果要阻止代码继续执行 用Promise拒绝请求发送
    if (err.response && err.response.data && err.response.data.code === 10002) {
      store.dispatch('user/logout')
      router.push('/login')
    }
    Message.error(message)
    return Promise.reject(new Error(message))
  }
}, err => {
  console.log(err);
  console.dir(err);
  Message.error(err.message)
  return Promise.reject(new Error(message))
})

export default service
